查看原文
其他

湖仓一体架构发展史

ruby ruby的数据漫谈
2024-09-27
摘要:在大数据时代,数据处理架构的演变对企业的数据管理和分析能力产生了深远影响。本文深入探讨了从Lambda架构的提出,到Kappa架构的优化,再到湖仓一体架构的创新发展历程。Lambda架构以其批处理和速度层的分离,解决了大规模数据的实时处理问题,但随着技术的进步,其复杂性和维护成本逐渐成为挑战。Kappa架构作为Lambda的简化版本,通过统一处理层,降低了系统的复杂性,但对数据一致性的要求更高。最新的湖仓一体架构则融合了数据湖的灵活性和数据仓库的结构化优势,提供了一个统一的数据管理和分析平台,旨在打破数据孤岛,提升数据价值。文章将分析这些架构的优势和劣势,并探讨它们在实际应用中的潜力和挑战,为企业在数据架构选择上提供参考。



  • Lambda架构

  • Kappa架构

  • 基于Flink+Iceberg的湖仓一体架构‍‍‍‍‍‍‍‍‍‍‍‍‍



01

Lambda架构


Lambda架构是由Nathan Marz提出的一个实时大数据处理框架,它旨在处理大数据的批量离线处理和实时数据处理的需求。Lambda架构通过结合批处理和实时流处理,以兼顾高容错性、低延迟和可扩展性。这种架构的核心是不可变数据的概念,所有传入的数据都以仅追加的方式捕获和存储,从而创建未更改的历史记录。

Lambda架构由三层组成:
1、批处理层(Batch Layer):负责存储和管理主数据集,并进行预先的批处理计算。这一层使用分布式处理系统(如Apache Hadoop或Apache Spark)来处理历史数据,生成准确且全量的数据视图(Batch View),通常存储在只读数据库中。
2、速度处理层(Speed Layer):专注于实时处理新生成的数据。它通过接收并处理最新的增量数据流,迅速生成实时数据视图(Real-time View),以满足对实时性要求较高的应用场景。速度层通常利用流处理框架,如Apache Storm或Apache Flink。
3、服务层(Serving Layer):作为查询和可视化数据的访问点,它结合了批处理层和速度层的结果,并提供一致的数据视图。服务层通常使用如Apache HBase或Apache Cassandra这样的技术来存储和提供数据。
Lambda架构的优势包括高容错性、低延迟、可扩展性、查询灵活性以及数据的不可变性。它允许随时将新的算法或分析方法应用于数据,因为数据以原始格式存储。此外,Lambda架构支持可扩展的处理,因为每一层都可以独立扩展以处理不断增加的工作负载。然而,Lambda架构也存在一些劣势,主要劣势有以下几个问题:
1、数据不一致问题:由于两个过程运行的时间是不一样的,跑的数据却相同,因此可能造成数据的不一致。
2、数据更新成本高:因为某一条或几条数据的更新,需要重新跑一遍整个离线分析的链路,数据更新成本很大。
3、维护成本高:需要维护离线和实时分析两套计算平台,整个上下两层的开发流程和运维成本其实都是非常高的。
Lambda架构适用于多种大数据处理场景,包括日志分析、传感器数据分析、用户行为分析等。它的成功案例包括Twitter的情感分析、Groupon的企业应用、Crashlytics的移动端数据分析等。尽管存在一些挑战,Lambda架构仍然是构建数据湖和处理大规模数据集的重要工具之一。




02

Kappa架构

‍‍‍‍‍


Kappa架构是由LinkedIn的前首席工程师Jay Kreps提出的一种数据处理架构,旨在简化Lambda架构并专注于流处理。在Kappa架构中,所有数据都作为持续的数据流引入和处理,无需维护单独的批处理层。这种架构的核心组件包括:

1、流引入:数据从各种源连续引入并存储在事件日志中,例如使用Apache Kafka作为消息队列,它充当持久、容错的存储机制,保留事件的完整历史记录。

2、流处理:使用流处理层对事件日志中的数据进行实时计算,生成所需的输出。可以使用Apache Kafka Streams或Apache Flink等技术进行处理和分析。

3、输出服务:处理后的数据通过各种输出通道访问,如实时仪表板、API或数据接收器,供进一步分析或使用。

Kappa架构的优点包括简化了整体系统设计,降低了操作复杂性,提供低延迟处理,并且由于不需要同步和合并来自不同层的数据,数据一致性方面也更为简单。然而,Kappa架构也有其挑战,比如在处理需要分析大型历史数据集的用例时可能会遇到限制,并且对流处理框架的性能和可伸缩性有较高的依赖。主要的劣势有以下几个方面:

1、kappa架构中间层不支持OLAP分析:如果需要支持,则需要引入其它实时数据仓库,会增加系统的复杂性。‍‍‍‍‍‍‍‍‍‍

2、kappa架构处理大量历史数据的时候有些力不从心,由于kappa架构中间数据都是存储在消息队列中,对消息队列存储要求高,消息队列的回溯能力不及离线存储。

3、消息队列的时许可能会导致结果不正确全链路依赖消息队列的实时计算可能因为数据的时序性导致结果不正确。


在选择Lambda和Kappa架构时,应考虑数据特征、系统复杂性、可伸缩性和性能、数据一致性以及操作注意事项。如果应用案例需要实时和历史分析,则Lambda架构可能更适合;如果主要关注实时处理和低延迟见解,Kappa架构可能是更好的选择。

Kappa架构适合那些对实时数据处理有高要求的场景,并且希望通过简化数据处理流程来提高效率的组织。随着技术的发展,Kappa架构有望在更多场景下逐渐替换Lambda架构,特别是在流处理技术如Apache Flink的成熟和普及的背景下。



03

基于Flink+Iceberg的湖仓一体架构

湖仓一体架构是一种新兴的数据管理解决方案,它结合了数据湖的灵活性和数据仓库的高性能,为企业提供了一个统一的数据平台。这种架构的核心思想是将数据湖的低成本存储和数据仓库的管理和分析能力相结合,以适应现代企业对数据多样化处理的需求。

在湖仓一体架构中,统一元数据管理是关键,它确保了数据的一致性、可发现性和治理性。实现统一元数据管理需要包括元数据存储、元数据服务、元数据查询服务等核心功能,同时还需要支持存储层和计算层的相关功能,如ACID事务支持、数据存储模式、数据更新和快照、元数据版本控制以及数据和元数据的关联等。

Flink+Iceberg是构建湖仓一体和流批一体技术架构的一种流行选择。Apache Flink是一个流批统一的计算引擎,而Apache Iceberg是一个开源的表格格式,用于存储大规模分析数据。Flink与Iceberg的结合可以实现数据的实时处理和批处理,支持ACID事务,提供增量读取和写入,以及与多种计算引擎和存储系统的兼容性。

Flink+Iceberg构建湖仓一体和流批一体的技术架构的优势包括:

1、流批统一:使用Flink作为统一的计算引擎,可以同时处理流数据和批数据,简化了开发和运维。

2、高效的实时处理:Flink的流处理能力可以提供低延迟的数据处理,满足实时分析的需求。

3、灵活的数据存储:Iceberg支持多种文件格式和存储系统,使得数据湖可以灵活地存储和处理各种数据类型。

4、元数据管理:Iceberg的元数据管理能力使得数据的结构和位置可以被统一管理和查询。

5、成本效益:通过使用廉价的存储资源和优化的数据处理流程,降低整体的存储和计算成本。

在这个架构中,能够实现流批一体的开发模式关键是Flink引擎的流处理API和批处理API以及在Iceberg的表中支持Flink引擎通过 Change Data Capture (CDC) 功能以流的方式读取和处理 Iceberg 表中的增量变化


在进行批处理和流处理的开发时,Flink 提供了 DataStream API 和 Table API 两种方式来操作数据流。使用 DataStream API 时,开发者可以通过编写具体的处理逻辑来实现数据的实时处理。而 Table API 则提供了一种更接近 SQL 的表达方式,可以简化开发流程,使得对数据表的操作更加直观和易于管理。

一、流处理过程

在流处理过程中,使用 Flink 消费 Kafka 中的消息并转换后写入 Iceberg 表的操作可以通过以下步骤实现:

1、设置 Flink 环境:首先,需要配置 Flink 环境,包括设置 Flink 集群和相关依赖。

2、创建 Kafka Source:在 Flink 中创建一个 Kafka Source,用于连接到 Kafka 主题并消费消息。

3、数据处理:对从 Kafka 消费的数据进行必要的转换和处理。

4、写入 Iceberg:使用 Flink 的 Iceberg Sink 功能,将处理后的数据写入 Iceberg 表。这通常涉及到配置 Iceberg Sink 以连接到 Iceberg 表,并设置相应的写入模式(如 append 或 overwrite)。

5、增量数据处理:为了将 Iceberg 表的增量数据写入 DWH(数据仓库)层,可以启动一个新的 Flink 作业,该作业从 Iceberg 表中读取增量数据,进行必要的转换,并写入到 DWH 层的目标表中。这可以通过 Flink 的 Change Data Capture (CDC) 功能实现,它允许 Flink 以流的方式读取和处理 Iceberg 表中的增量变化。

6、配置和优化:根据需要配置 Flink 作业的并行度、检查点和状态后端等,以确保作业的稳定性和性能。

7、监控和维护:启动 Flink 作业后,需要监控作业的运行状态,确保数据正确地从 Kafka 流向 Iceberg,再从 Iceberg 流向 DWH 层。

这个过程可以通过 Flink SQL 或 DataStream API 实现。例如,使用 Flink SQL,可以编写类似于以下的 SQL 语句来实现数据的写入和读取:

在实际操作中,可能需要根据具体的业务逻辑和数据模式来调整上述步骤和 SQL 语句。此外,还需要考虑数据的分区策略、格式转换、时间戳处理等细节问题。

二、批处理过程

Flink与Iceberg结合可以实现高效的批处理流程。在Flink中,可以使用DataStream API或Table API来实现对Iceberg表的批量读取和写入操作。

批量读取Iceberg表

在Flink中,可以通过设置执行模式为批处理模式来读取Iceberg表中的全量数据。这可以通过以下步骤实现:

1、设置执行环境:首先,需要创建一个Flink执行环境,并设置为批处理模式。

2、创建表连接:使用Flink的Table API或SQL Client创建与Iceberg表的连接。

3、执行查询:通过Flink SQL或Table API执行查询,以读取Iceberg表中的数据。

例如,使用Flink SQL进行批量读取的示例代码如下:

批量写入Iceberg表

Flink也支持将处理后的数据批量写入Iceberg表。这通常涉及到以下步骤:

1、数据处理:在Flink中对数据进行必要的处理。

2、写入Iceberg:使用Flink的DataStream API或Table API将处理后的数据写入Iceberg表。


在这个架构图中,每个数据层可以使用presto 引擎进行OLAP数据分析。


在实际应用中,Flink+Iceberg可以帮助企业构建一个既能处理实时数据又能处理历史数据的统一数据平台,从而提高数据处理效率,降低成本,并提升数据的价值。本处是采用常见的计算引擎和存储管理引擎在解释流批一体的开发模式,其它平台可以采用其它计算引擎也同样可以实现。


注:本文中相关架构图来源腾讯云开发者社区。


欢迎加入【数据行业交流群】社群,长按以下二维码加入专业微信群,商务合作加微信备注商务合作,AIGC应用开发交流入群备注AIGC应用



往期数据平台历史热门文章:

基于DataOps的数据开发治理:实现数据流程的自动化和规范化

数据平台:湖仓一体、流批一体、存算分离的核心问题及原因解析

数据治理体系该怎么建设?

实时数仓&流批一体技术发展趋势

数据仓库、数据中台、大数据平台的关系?

数字化转型如何促进业务的发展

数据中台中的核心概念解析

数据治理中的数据标准的作用?

全面数字化转型:打造全新营销模式

一图展示数据中台的数据流图

揭秘数据治理系统的数据流程图

往期AIGC历史热门文章:

AIGC系列之一-一文理解什么是Embedding嵌入技术

十大AIGC文生视频产品介绍

九大最热门的开源AI Agent框架

AutoGen零代码构建⾃⼰的智能助理

往期数据资产入表历史热门文章:

资产入表

数据资产入表流程

数据资产管理及入表的关键步骤


继续滑动看下一个
ruby的数据漫谈
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存